<?php
class MovimentosController extends AppController {

	var $name = 'Movimentos';
	var $components = array('Mov', 'PEP', 'Decimals');
	var $paginate = array('limit'=>20);

	function index($idNotaFiscal) {
		$movimentos = $this->Movimento->find('all', array(
									'conditions'=>array('nota_fiscal_id'=>$idNotaFiscal),
									'fields'=>array('NotaFiscal.money_valor','NotaFiscal.money_IPI','NotaFiscal.money_desconto', 'Movimento.id_movimento', 'Movimento.quantidade_externa',
										'Movimento.money_valor_unit', 'Movimento.money_desconto_produto',
										'Movimento.money_IPI_produto', '(Movimento.quantidade_externa * Movimento.money_valor_unit) AS valorProduto', 'Produto.descricao')
								));
		foreach ($movimentos as &$item){
			$item['Movimento']['money_valor_unit_view'] = $this->Decimals->converteMoneyParaView($item['Movimento']['money_valor_unit']);
			$item['Movimento']['money_desconto_produto_view'] = $this->Decimals->converteMoneyParaView($item['Movimento']['money_desconto_produto']);
			$item['Movimento']['money_IPI_produto_view'] = $this->Decimals->converteMoneyParaView($item['Movimento']['money_IPI_produto']);
			$item['NotaFiscal']['money_IPI_view'] = $this->Decimals->converteMoneyParaView($item['NotaFiscal']['money_IPI']);
			$item['NotaFiscal']['money_desconto_view'] = $this->Decimals->converteMoneyParaView($item['NotaFiscal']['money_desconto']);
			$item['NotaFiscal']['money_valor_view'] = $this->Decimals->converteMoneyParaView($item['NotaFiscal']['money_valor']);
			$item[0]['valorProduto_view'] = $this->Decimals->converteMoneyParaView($item[0]['valorProduto']);
		}
		return $movimentos;
								
	}
	
	function resultados($idNotaFiscal){
		$resultados = $this->Movimento->find('all', array(
									'conditions'=>array('nota_fiscal_id'=>$idNotaFiscal),
									'fields'=>array('SUM(Movimento.money_valor_unit*Movimento.quantidade_externa) as totalProdutos',
													'SUM(Movimento.money_IPI_produto) as totalIPI'
													)));
		
		$resultados[0][0]['totalProdutos_view'] = $this->Decimals->converteMoneyParaView($resultados[0][0]['totalProdutos']);
		$resultados[0][0]['totalIPI_view'] = $this->Decimals->converteMoneyParaView($resultados[0][0]['totalIPI']);
		return $resultados;
	}

	function view($id = null) {
		if (!$id) {
			$this->Session->setFlash(__('Setor inválido', true));
			$this->redirect(array('action' => 'index'));
		}
		$this->set('movimento', $this->Movimento->read(null, $id));
	}

	function add($idNotaFiscal = null) {
		if($idNotaFiscal == null){
			$idNotaFiscal = $this->Session->read("notaFiscalAtual");
		}
		$this->Session->write("notaFiscalAtual", $idNotaFiscal);
		$notaFiscal = $this->Movimento->NotaFiscal->find('first', array('conditions' => array('NotaFiscal.id_nota_fiscal' => $idNotaFiscal)));
		$notaFiscal['NotaFiscal']['money_valor_view'] = $this->Decimals->converteMoneyParaView($notaFiscal['NotaFiscal']['money_valor']);
		$notaFiscal['NotaFiscal']['money_IPI_view'] = $this->Decimals->converteMoneyParaView($notaFiscal['NotaFiscal']['money_IPI']);
		$aux = explode('-', $notaFiscal['NotaFiscal']['date_data']);
		$notaFiscal['NotaFiscal']['date_data_view'] = $aux[2].'/'.$aux[1].'/'.$aux[0];
		
		if (!empty($this->data)) {
			$this->Movimento->create();
			$this->data['Movimento']['user_id'] = $this->Session->read('Auth.User.id_user');
			$this->data['Movimento']['date_historico'] = $this->Mov->converteData($notaFiscal['NotaFiscal']['date_data']);
			/* Cálculo quantidade externa/interna */
			$this->data['Movimento']['produto_id'] = $this->PEP->getProdutoByEmpacotamentoId($this->data['Movimento']['empacotamento_id']);
			$this->data['Movimento']['quantidade'] = 
						$this->data['Movimento']['quantidade_externa']*$this->PEP->getQuantidadeByEmpacotamentoId($this->data['Movimento']['empacotamento_id']);
			if ($this->Movimento->save($this->data)) {
				$this->redirect(array('controller'=>'movimentos', 'action'=>'add', $idNotaFiscal));
			} else {
				$this->Session->setFlash(__('Registro não foi salvo. Por favor, tente novamente!', true));
			}
		}
		$this->data = null;
		$produtos = $this->PEP->selectProdutos($this->Session->read('Auth.User.id_user'));
		$this->set(compact('notaFiscal', 'produtos'));
		
	}

	function saida(){
		//Data
	if($this->data == null){
			if($this->Session->read('data.mes') == null){
				$this->data['mes'] = date('m');
				$this->data['ano'] = date('Y');
			}
			else{
				$this->data['mes'] = $this->Session->read('data.mes');
				$this->data['ano'] = $this->Session->read('data.ano');
			}
		}
		else{
			$this->Session->write('data.mes', $this->data['mes']);
			$this->Session->write('data.ano', $this->data['ano']);
		}
		$this->set('mes', $this->data['mes']);
		$this->set('ano', $this->data['ano']);
		
		$this->Movimento->recursive = 1;
		if($this->Session->read('Auth.User.tipo_usuario') !== 'A')
			$this->set('movimentos', $this->paginate('Movimento', array('Movimento.user_id' => $this->Session->read('Auth.User.id_user'), 'quantidade <' => 0, "date_historico >="=>$this->data['ano']."-".$this->data['mes']."-01", "date_historico <="=>$this->data['ano']."-".$this->data['mes']."-31")));
		else 
			$this->set('movimentos', $this->paginate('Movimento', array('quantidade <' => 0, "date_historico >="=>$this->data['ano']."-".$this->data['mes']."-01", "date_historico <="=>$this->data['ano']."-".$this->data['mes']."-31")));
		// Unidades
		Controller::loadModel('Unidade');
		$this->set('unidades', $this->Unidade->find('list', array('fields'=>array('id_unidade', 'unidade'))));
	}
	
	function saida_add(){
		if (!empty($this->data)) {
			$this->Movimento->create();
			$this->data['Movimento']['user_id'] = $this->Session->read('Auth.User.id_user');
			$this->data['Movimento']['empacotamento_id'] = 0;
			$this->data['Movimento']['quantidade_externa'] = 0;
			if($this->Mov->verificaSaidaEstoque($this->data['Movimento']['quantidade'], $this->data['Movimento']['produto_id'])){
			
				if(!empty($this->data['Movimento']['quantidade']))
					$this->data['Movimento']['quantidade'] *= -1;
				$this->data['Movimento']['nota_fiscal_id'] = 0;
				$this->data['Movimento']['money_valor_unit'] = "0.00";
				if ($this->Movimento->save($this->data)) {
					$this->Session->setFlash(__('A saída foi salva', true));
					$this->data = null;
				} else {
					$this->Session->setFlash(__('A saída não pode ser salva. Por favor, tente novamente.', true));
				}
				if(!empty($this->data['Movimento']['quantidade']))
					$this->data['Movimento']['quantidade'] *= -1;
			}
			else $this->Session->setFlash(__('Quantidade indisponível no Estoque!', true));
		}

		if($this->Session->read('Auth.User.tipo_usuario') !== 'A')
		$produtos = $this->Movimento->Produto->find('list',
													array('fields'=>array('id_produto', 'descricao'),
														  'conditions'=>array('Produto.user_id'=>$this->Session->read('Auth.User.id_user')),
														  'order'=>'descricao ASC'));
		else $produtos = $this->Movimento->Produto->find('list',
													array('fields'=>array('id_produto', 'descricao'),
														  'order'=>'descricao ASC'));
		if($this->Session->read('Auth.User.tipo_usuario') !== 'A')
		$produtos_unidades = $this->Movimento->Produto->find('all',
													array('fields'=>array('id_produto', 'Unidade.unidade'),
														  'conditions'=>array('Produto.user_id'=>$this->Session->read('Auth.User.id_user'))));
		else 
		$produtos_unidades = $this->Movimento->Produto->find('all',
													array('fields'=>array('id_produto', 'Unidade.unidade')));
		if($this->Session->read('Auth.User.tipo_usuario') !== 'A')											
		$setores = $this->Movimento->Setore->find('list', array(
							'conditions' => array('Setore.user_id' => $this->Session->read('Auth.User.id_user')),
							'fields' => array('id_setor', 'setor')));
		else $setores = $this->Movimento->Setore->find('list', array(
							'fields' => array('id_setor', 'setor')));
		$this->set(compact('produtos', 'setores', 'produtos_unidades'));
	}

	function delete($id = null, $idNotaFiscal = null) {
		if (!$id) {
			if($idNotaFiscal == null){
				$this->Session->setFlash(__('Saída inválida', true));
				$this->redirect(array('action'=>'saida'));
			}
			else{
				$this->Session->setFlash(__('Registro inválido', true));
				$this->redirect(array('action'=>'add', $idNotaFiscal));
			}
		}
		if ($this->Movimento->delete($id)) {
			if($idNotaFiscal == null){
				$this->Session->setFlash(__('Saída apagada com sucesso!', true));
				$this->redirect(array('action'=>'saida'));
			}
			else{
				$this->Session->setFlash(__('Registro apagado com sucesso!', true));
				$this->redirect(array('action'=>'add', $idNotaFiscal));
			}
		}
		if($idNotaFiscal == null){
			$this->Session->setFlash(__('Saída não foi apagada. Por favor, tente novamente!', true));
			$this->redirect(array('action'=>'saida'));
		}
		else{
			$this->Session->setFlash(__('Registro não foi apagado. Por favor, tente novamente!', true));
			$this->redirect(array('action' => 'add', $idNotaFiscal));
		}
	}
	
}
?>